![]() |
![]() |
![]() | |
![]() ![]() ![]() ![]()
╠φεπε∩ε≥ε≈φε±≥ⁿ |
╬∩Φ±αφΦσ Φ±⌡εΣφ√⌡ ≥σΩ±≥εΓ α∩δσ≥α Rectangles┬ ²≥ε∞ ∩≡ΦδεµσφΦΦ ∞√ ±ετΣασ∞ φα ßατσ Ωδα±±α Thread ≥≡Φ Ωδα±±α. ╧σ≡Γ√Θ Φτ φΦ⌡ ∩≡σΣφατφα≈σφ Σδ ±ετΣαφΦ ∩ε≥εΩα ≡Φ±εΓαφΦ ∩≡ ∞ε≤πεδⁿφΦΩεΓ, Γ≥ε≡εΘ - Σδ ±ετΣαφΦ ∩ε≥εΩα ≡Φ±εΓαφΦ ταΩ≡α°σφφ√⌡ ²δδΦ∩±εΓ, α ≥≡σ≥ΦΘ - Σδ ≤∩≡αΓδσφΦ ∩ε≥εΩε∞ ≡Φ±εΓαφΦ ²δδΦ∩±εΓ. ╫≥ε µσ Ωα±ασ≥± ε±φεΓφεπε Ωδα±±α α∩δσ≥α, ≥ε εφ ≤φα±δσΣεΓαφ, ΩαΩ εß√≈φε, ε≥ Ωδα±±α Applet Φ φσ ≡σαδΦτ≤σ≥ Φφ≥σ≡⌠σΘ± Runnable: public class Rectangles extends Applet { . . . } ╧εδ Ωδα±±α Rectangles┬ Ωδα±±σ Rectangles ∞√ ε∩≡σΣσδΦδΦ ≥≡Φ ∩εδ ± Φ∞σφα∞Φ m_DrawRectThread, m_DrawEllipseThread Φ m_NotifyTaskThread: DrawRectangles m_DrawRectThread = null; DrawEllipse m_DrawEllipseThread = null; NotifyTask m_NotifyTaskThread = null ▌≥Φ ∩εδ Γδ ■≥± ±±√δΩα∞Φ φα Ωδα±±√, ±εε≥Γσ≥±≥Γσφφε DrawRectangles, DrawEllipse Φ NotifyTask . ╧σ≡Γ√Θ Φτ φΦ⌡ ±ετΣαφ Σδ ≡Φ±εΓαφΦ ∩≡ ∞ε≤πεδⁿφΦΩεΓ, Γ≥ε≡εΘ - ²δδΦ∩±εΓ, α ≥≡σ≥ΦΘ - Σδ ≤∩≡αΓδσφΦ ∩ε≥εΩε∞ ≡Φ±εΓαφΦ ²δδΦ∩±εΓ. ╙Ωαταφφ√σ ∩εδ ΦφΦ÷ΦαδΦτΦ≡≤■≥± ταφ≈σφΦσ∞ null, ≈≥ε ±εε≥Γσ≥±≥Γ≤σ≥ φσ≡αßε≥α■∙Φ∞ ΦδΦ φσ±ετΣαφφ√∞ ταΣα≈α∞. ╠σ≥εΣ start Ωδα±±α Rectangles▌≥ε≥ ∞σ≥εΣ ∩ε±δσΣεΓα≥σδⁿφε ±ετΣασ≥ ≥≡Φ ∩ε≥εΩα Φ τα∩≤±Ωασ≥ Φ⌡ φα Γ√∩εδφσφΦσ: if(m_DrawRectThread == null) { m_DrawRectThread = new DrawRectangles(this); m_DrawRectThread.start(); } if(m_DrawEllipseThread == null) { m_DrawEllipseThread = new DrawEllipse(this); m_DrawEllipseThread.start(); } if(m_NotifyTaskThread == null) { m_NotifyTaskThread = new NotifyTask(m_DrawEllipseThread); m_NotifyTaskThread.start(); } ┬ Ωα≈σ±≥Γσ ∩α≡α∞σ≥≡α Ωεφ±≥≡≤Ω≥ε≡α∞ Ωδα±±εΓ DrawRectangles Φ DrawEllipse ∞√ ∩σ≡σΣασ∞ ±±√δΩ≤ φα α∩δσ≥ Rectangles. ▌≥α ±±√δΩα ß≤Σσ≥ φ≤µφα Σδ ∩εδ≤≈σφΦ Ωεφ≥σΩ±≥α ε≥εß≡αµσφΦ Φ ≡Φ±εΓαφΦ πσε∞σ≥≡Φ≈σ±ΩΦ⌡ ⌠Φπ≤≡. ╧ε≥εΩ Ωδα±±α NotifyTask ß≤Σσ≥ ≤∩≡αΓδ ≥ⁿ ≡αßε≥εΘ ∩ε≥εΩα DrawEllipse, ∩ε²≥ε∞≤ ∞√ ∩σ≡σΣασ∞ σπε Ωεφ±≥≡≤Ω≥ε≡≤ ±±√δΩ≤ φα ±εε≥Γσ≥±≥Γ≤■∙ΦΘ εß·σΩ≥ m_DrawEllipseThread. ╠σ≥εΣ stop Ωδα±±α Rectangles╩επΣα ∩εδⁿτεΓα≥σδⁿ ∩εΩΦΣασ≥ ±≥≡αφΦ÷≤ ±σ≡Γσ≡α Web ± α∩δσ≥ε∞, ∞σ≥εΣ stop Ωδα±±α Rectangles ∩ε±δσΣεΓα≥σδⁿφε ε±≥αφαΓδΦΓασ≥ gjnjrb ≡Φ±εΓαφΦ ∩≡ ∞ε≤πεδⁿφΦΩεΓ Φ ²δδΦ∩±εΓ, α ≥αΩµσ ≤∩≡αΓδ ■∙ΦΘ ∩ε≥εΩ: if(m_DrawRectThread != null) { m_DrawRectThread.stop(); m_DrawRectThread = null; } if(m_DrawEllipseThread == null) { m_DrawEllipseThread.stop(); m_DrawEllipseThread = null; } if(m_NotifyTaskThread != null) { m_NotifyTaskThread.stop(); m_NotifyTaskThread = null; } ╧εδ Ωδα±±α DrawRectangles╩δα±± DrawRectangles ε∩≡σΣσδσφ Σδ ∩ε≥εΩα ≡Φ±εΓαφΦ ∩≡ ∞ε≤πεδⁿφΦΩεΓ: class DrawRectangles extends Thread { . . . } ┬ ∩εδσ g Ωδα±α ⌡≡αφΦ≥± Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ εΩφα α∩δσ≥α, α Γ ∩εδσ dimAppWndDimension - ≡ατ∞σ≡√ ²≥επε εΩφα: Graphics g; Dimension dimAppWndDimension; ╟φα≈σφΦ ²≥Φ⌡ ∩εδσΘ ε∩≡σΣσδ ■≥± Ωεφ±≥≡≤Ω≥ε≡ε∞ Ωδα±±α ∩ε ±±√δΩσ φα πδαΓφ√Θ Ωδα±± α∩δσ≥α. ╩εφ±≥≡≤Ω≥ε≡ Ωδα±±α DrawRectangles┬ Ωα≈σ±≥Γσ ∩α≡α∞σ≥≡α Ωεφ±≥≡≤Ω≥ε≡≤ ∩σ≡σΣασ≥± ±±√δΩα φα Ωδα±± α∩δσ≥α. ╩εφ±≥≡≤Ω≥ε≡ Φ±∩εδⁿτ≤σ≥ ²≥≤ ±±√δΩ≤ Σδ ∩εδ≤≈σφΦ Φ ±ε⌡≡αφσφΦ Γ ∩εδ ⌡ Ωδα±±α Ωεφ≥σΩ±≥α ε≥εß≡αµσφΦ Φ ≡ατ∞σ≡εΓ εΩφα α∩δσ≥α: public DrawRectangles(Applet Appl) { g = Appl.getGraphics(); dimAppWndDimension = Appl.getSize(); } ╠σ≥εΣ run Ωδα±±α DrawRectangles╧≡επ≡α∞∞φ√Θ ΩεΣ ∞σ≥εΣα run ≡αßε≥ασ≥ Γ ≡α∞Ωα⌡ ε≥Σσδⁿφεπε ∩ε≥εΩα. ╬φ ≡Φ±≤σ≥ Γ εΩφσ α∩δσ≥α ταΩ≡α°σφφ√σ ∩≡ ∞ε≤πεδⁿφΦΩΦ. ╧≡ ∞ε≤πεδⁿφΦΩΦ Φ∞σ■≥ ±δ≤≈αΘφ√σ Ωεε≡ΣΦφα≥√, ≡α±∩εδεµσφΦσ Φ ÷Γσ≥. ─δ ≥επε ≈≥εß√ ≡Φ±εΓα≥ⁿ, φσεß⌡εΣΦ∞ε ∩εδ≤≈Φ≥ⁿ Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ . ▌≥ε≥ Ωεφ≥σΩ±≥ ß√δ ∩εδ≤≈σφ Ωεφ±≥≡≤Ω≥ε≡ε∞ Ωδα±±α DrawRectangles Φ ∞εµσ≥ ß√≥ⁿ Φ±∩εδⁿτεΓαφ ∞σ≥εΣε∞ run. ┬εε≡≤µΦΓ°Φ±ⁿ Ωεφ≥σΩ±≥ε∞ ε≥εß≡αµσφΦ Φ ≡ατ∞σ≡α∞Φ εΩφα α∩δσ≥α, ∩ε≥εΩ Γ⌡εΣΦ≥ Γ ßσ±Ωεφσ≈φ√Θ ÷ΦΩδ ≡Φ±εΓαφΦ ∩≡ ∞ε≤πεδⁿφΦΩεΓ. ┬ Ωα≈σ±≥Γσ πσφσ≡α≥ε≡α ±δ≤≈αΘφ√⌡ ≈Φ±σδ ∞√ Φ±∩εδⁿτ≤σ∞ ∞σ≥εΣ random Φτ Ωδα±±α Math, Ωε≥ε≡√Θ ∩≡Φ ΩαµΣε∞ Γ√τεΓσ ΓετΓ≡α∙ασ≥ φεΓεσ ±δ≤≈αΘφεσ ≈Φ±δε ≥Φ∩α double, δσµα∙σσ Γ ΣΦα∩ατεφσ τφα≈σφΦΘ ε≥ 0.0 Σε 1.0. ╩εε≡ΣΦφα≥√ ∩ε ε± ∞ X Φ Y ≡Φ±≤σ∞επε ∩≡ ∞ε≤πεδⁿφΦΩα ε∩≡σΣσδ ■≥± ∩≡ε±≥√∞ ≤∞φεµσφΦσ∞ ±δ≤≈αΘφεπε ≈Φ±δα, ∩εδ≤≈σφφεπε ε≥ ∞σ≥εΣα random, ±εε≥Γσ≥±≥Γσφφε, φα °Φ≡Φφ≤ Φ Γ√±ε≥≤ εΩφα α∩δσ≥α: x = (int)(dimAppWndDimension.width * Math.random()); y = (int)(dimAppWndDimension.height * Math.random()); └φαδεπΦ≈φε ε∩≡σΣσδ ■≥± ≡ατ∞σ≡√ ∩≡ ∞ε≤πεδⁿφΦΩα, εΣφαΩε ≈≥εß√ ∩≡ ∞ε≤πεδⁿφΦΩΦ φσ ß√δΦ ±δΦ°Ωε∞ Ω≡≤∩φ√∞Φ, ∞√ ΣσδΦ∞ ∩εδ≤≈σφφ√σ τφα≈σφΦ φα 2: width = (int)(dimAppWndDimension.width * Math.random()) / 2; height = (int)(dimAppWndDimension.height * Math.random()) / 2; ╥αΩ ΩαΩ ±δ≤≈αΘφεσ ≈Φ±δε Φ∞σσ≥ ≥Φ∩ double, Γ εßεΦ⌡ ±δ≤≈α ⌡ ∞√ Γ√∩εδφ σ∞ Γφεσ ∩≡σεß≡ατεΓαφΦσ ≡στ≤δⁿ≥α≥α Γ√≈Φ±δσφΦΘ Ω ≥Φ∩≤ int. ─δ ±δ≤≈αΘφεπε Γ√ßε≡α ÷Γσ≥α ∩≡ ∞ε≤πεδⁿφΦΩα ∞√ Γ√≈Φ±δ σ∞ ε≥Σσδⁿφ√σ ÷Γσ≥εΓ√σ Ωε∞∩εφσφ≥√, ≤∞φεµα τφα≈σφΦσ, ∩εδ≤≈σφφεσ ε≥ ∞σ≥εΣα random, φα ≈Φ±δε 255: rColor = (int)(255 * Math.random()); gColor = (int)(255 * Math.random()); bColor = (int)(255 * Math.random()); ╧εδ≤≈σφφ√σ τφα≈σφΦ ÷Γσ≥εΓ√⌡ Ωε∞∩εφσφ≥ Φ±∩εδⁿτ≤■≥± Γ Ωεφ±≥≡≤Ω≥ε≡σ Color Σδ ∩εδ≤≈σφΦ ÷Γσ≥α. ▌≥ε≥ ÷Γσ≥ ≤±≥αφαΓδΦΓασ≥± Γ Ωεφ≥σΩ±≥σ ε≥εß≡αµσφΦ ∞σ≥εΣε∞ setColor: g.setColor(new Color(rColor, gColor, bColor)); ╥σ∩σ≡ⁿ Γ±σ πε≥εΓε Σδ ≡Φ±εΓαφΦ ∩≡ ∞ε≤πεδⁿφΦΩα, Ωε≥ε≡εσ ∞√ Γ√∩εδφ σ∞ ∩≡Φ ∩ε∞ε∙Φ ∞σ≥εΣα fillRect: g.fillRect(x, y, width, height); ╧ε±δσ ≡Φ±εΓαφΦ ∩≡ ∞ε≤πεδⁿφΦΩα ∞σ≥εΣ run ταΣσ≡µΦΓασ≥ ±Γε■ ≡αßε≥≤ φα 50 ∞ΦδδΦ±σΩ≤φΣ, Γ√τ√Γα ∞σ≥εΣ sleep: try { Thread.sleep(50); } catch (InterruptedException e) { stop(); } ─δ εß≡αßε≥ΩΦ Φ±Ωδ■≈σφΦ InterruptedException, Ωε≥ε≡εσ ∞εµσ≥ ΓετφΦΩφ≤≥ⁿ Γε Γ≡σ∞ ≡αßε≥√ ²≥επε ∞σ≥εΣα, ∞√ ∩≡σΣ≤±∞ε≥≡σδΦ ßδεΩ try - catch. ╧≡Φ ΓετφΦΩφεΓσφΦΦ ≤Ωαταφφεπε Φ±Ωδ■≈σφΦ ≡αßε≥α ∩ε≥εΩα ε±≥αφαΓδΦΓασ≥± Γ√τεΓε∞ ∞σ≥εΣα stop. ╠σ≥εΣ run Ωδα±±α DrawEllipse╩δα±± DrawEllipse ε≈σφⁿ ∩ε⌡εµ φα ≥εδⁿΩε ≈≥ε ≡α±±∞ε≥≡σφφ√Θ Ωδα±± DrawRectangles. ╬≥δΦ≈Φσ σ±≥ⁿ ≥εδⁿΩε Γ ⌠Φφαδⁿφε∞ ⌠≡απ∞σφ≥σ ∞σ≥εΣα run, Ωε≥ε≡√Θ ∞√ Φ ≡α±±∞ε≥≡Φ∞. ┬∞σ±≥ε ταΣσ≡µΩΦ φα 50 ∞ΦδδΦ±σΩ≤φΣ ∞σ≥εΣ run Φτ Ωδα±±α DrawEllipse ∩σ≡σ⌡εΣΦ≥ Γ ±ε±≥ε φΦσ εµΦΣαφΦ ΦτΓσ∙σφΦ , Γ√τ√Γα ∞σ≥εΣ wait: try { this.wait(); } catch (InterruptedException e) { } ▌≥ε ΦτΓσ∙σφΦσ ±ετΣασ≥± ≤∩≡αΓδ ■∙Φ∞ ∩ε≥εΩε∞ Ωδα±±α NotifyTask, Ω ε∩Φ±αφΦ■ Ωε≥ε≡επε ∞√ ∩σ≡σ⌡εΣΦ∞. ╧εδ Ωδα±±α NotifyTask┬ Ωδα±±σ NotifyTask ∞√ ε∩≡σΣσδΦδΦ εΣφε ∩εδσ STask Ωδα±±α Thread. ▌≥ε ∩εδσ Ωε≥ε≡εσ ⌡≡αφΦ≥ ±±√δΩ≤ φα ∩ε≥εΩ, ≡αßε≥εΘ Ωε≥ε≡επε ≤∩≡αΓδ σ≥ Σαφφ√Θ Ωδα±±: class NotifyTask extends Thread { Thread STask; . . . } ╩εφ±≥≡≤Ω≥ε≡ Ωδα±±α NotifyTask╩εφ±≥≡≤Ω≥ε≡ Ωδα±±α NotifyTask τα∩Φ±√Γασ≥ Γ ∩εδσ STask ±±√δΩ≤ φα ταΣα≈≤ ≡Φ±εΓαφΦ ²δδΦ∩±εΓ: public NotifyTask(Thread SynchroTask) { STask = SynchroTask; } ╠σ≥εΣ run Ωδα±±α NotifyTask╠σ≥εΣ run Ωδα±±α NotifyTask ∩σ≡ΦεΣΦ≈σ±ΩΦ ≡ατßδεΩΦ≡≤σ≥ ∩ε≥εΩ ≡Φ±εΓαφΦ ²δδΦ∩±εΓ, Γ√τ√Γα Σδ ²≥επε ∞σ≥εΣ notify Γ ÷ΦδΩσ ± ταΣσ≡µΩεΘ 30 ∞ΦδδΦ±σΩ≤φΣ. ╬ß≡α∙σφΦσ Ω εß·σΩ≥≤ STask, Ωε≥ε≡√Θ ⌡≡αφΦ≥ ±±√δΩ≤ φα ∩ε≥εΩ ≡Φ±εΓαφΦ ²δδΦ∩±εΓ, Γ√∩εδφ σ≥± ± Φ±∩εδⁿτεΓαφΦσ∞ ±Φφ⌡≡εφΦτα÷ΦΦ: public void run() { while (true) { try { Thread.sleep(30); } catch (InterruptedException e) { } synchronized(STask) { STask.notify(); } } } |